package priv.conceit.study.leetcode.simple.official;

import java.util.HashSet;
import java.util.Set;

/**
 * 编号202
 * 快乐数
 * <a href="https://leetcode-cn.com/problems/happy-number/">
 *
 * 编写一个算法来判断一个数是不是“快乐数”。
 * 一个“快乐数”定义为：对于一个正整数，
 * 每一次将该数替换为它每个位置上的数字的平方和，
 * 然后重复这个过程直到这个数变为 1，
 * 也可能是无限循环但始终变不到 1。
 * 如果可以变为 1，那么这个数就是快乐数。
 *
 * 示例:
 * 输入: 19
 * 输出: true
 * 解释:
 * 12 + 92 = 82
 * 82 + 22 = 68
 * 62 + 82 = 100
 * 12 + 02 + 02 = 1
 *
 * @author Conceit
 * @since 1.0.0, 2019/11/05
 */
public class HappyNumber {

	/**
	 * 利用set 存储每次计算的结果，如果有重复 说明已经无法求解了 成为循环
	 * @param args
	 */
	public static void main(String[] args) {
		String string=new String();
		int n=19;
		n/=10;
		System.out.println(19%10);
		System.out.println(n);
		System.out.println(Math.pow(9,2));
		System.out.println(19/10);
		System.out.println(1%10);
		System.out.println(Math.pow(1,2));

	}



	public boolean isHappy(int n) {
		Set<Integer>set=new HashSet<>();

		int result=0;
		for (;;){
			//计算每一位数字的平方和
			while (n!=0){
				result+=Math.pow(n%10,2);
				n=n/10;
			}
			//是否为1 为1则直接return
			if(result==1){
				return Boolean.TRUE;
			}

			//set 中是否存在
			if(set.contains(result)){
				return Boolean.FALSE;
			}else {
				set.add(result);
				//继续计算
				n=result;
				result=0;
			}
		}
	}

}
